// 1.创建新的axios实例
// 2.请求拦截器,携带本地token，如果有token进行头部携带
// 3.相应拦截器:1.玻璃无效数据  2.处理token无效
// 4.导出一个函数，调用当前的axios实力请求,返回值mpromise
import axios from 'axios'
import store from '@/store'
import router from '@/router'

// 导出基准地址，原因，其他地方不适用axios发请求
export const baseURL = 'https://apipc-xiaotuxian-front.itheima.net'
const serves = axios.create({
// axios配置选项  ,baseurl,timeout
  baseURL,
  timeout: 5000
})

// 请求拦截器
serves.interceptors.request.use(config => {
  // 进行请求配置修改
  // 如果本地有token就在头部携带
  // 获取用户信息对象
  const { profile } = store.state.user
  if (profile.token) {
    //   设置token
    config.headers.Authorization = `Bearer ${profile.token}`
  }
  return config
}, err => {
  // 请求失败失败
  return Promise.reject(err)
})

// 响应拦截器
serves.interceptors.response.use(res => {
// 相应成功
  return res.data
}, err => {
// 响应失败
// 401状态码,登陆无效
  if (err.response && err.response.status === 401) {
    // 1.清空本地无效用户信息
    // 2.跳转到登录页面
    // 3.跳转需要传参(当前路由地址)
    store.commit('user/setUser', {})
    // 当前路由地址
    // 组件里头,$route.path
    // js模块:router.currentRoute.fullPath.value  就是当前路由地址  是ref响应式数据
    const fullPath = encodeURIComponent(router.currentRoute.fullPath.value)
    router.push('/login?redirectUrl=' + fullPath)
  }
  return Promise.reject(err)
})

// 请求工具函数
export default serves
